package com.douxg.fastCoding.web.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.douxg.fastCoding.web.dto.EnjoyDto;
import com.douxg.fastCoding.web.entity.Enjoy;
import com.douxg.fastCoding.web.vo.EnjoyVo;

import java.util.List;
import java.util.Map;

/**
 * @Description
 * @Auther
 * @Date 2020-07-31 15:06
 */
public interface EnjoyService extends IService<Enjoy> {

    /**
     * 根据通用条件分页查询，带统计总数量和默认排序
     *
     * @param enjoyDto dto类
     * @param current  当前页码
     * @param size     每页数量
     * @return IPage<EnjoyVo>
     */
    IPage<EnjoyVo> page(EnjoyDto enjoyDto, Integer current, Integer size);

    /**
     * 根据通用条件获取一条数据，基于分页实现，查询出多条记录会刨异常
     *
     * @param enjoyDto dto类
     * @return EnjoyVo
     */
    EnjoyVo selectOne(EnjoyDto enjoyDto);

    /**
     * 根据通用条件获取一条数据，基于分页实现，查询出多条记录取第一条
     *
     * @param enjoyDto dto类
     * @return EnjoyVo
     */
    EnjoyVo selectOneNoEx(EnjoyDto enjoyDto);

    /**
     * 根据通用条件查询一批数据
     * 注意数据量过大会有oom的风险，如果不能确定安全数量建议使用分页接口
     *
     * @param enjoyDto dto类
     * @return List<EnjoyVo>
     */
    List<EnjoyVo> list(EnjoyDto enjoyDto);

    /**
     * 插入数据
     * 先根据主键查询，若不存在抛出异常
     *
     * @param enjoyDto dto类
     * @return boolean
     */
    boolean insert(EnjoyDto enjoyDto);

    /**
     * 通过主键更新数据
     * 先根据主键查询，若不存在抛出异常
     *
     * @param enjoyDto dto类
     * @return boolean
     */
    boolean updateById(EnjoyDto enjoyDto);

    String run(EnjoyDto enjoyDto, String content, Map kv);

    JSONObject selectFunctionTypes(String functionName);

    int renew(EnjoyDto enjoyDto);

    int allRenew();

    List<String> groups(EnjoyDto enjoyDto);
}
